package com.hca.training.zk.javabasic.Stringtest.Stringtest;

import java.io.*;
import java.util.*;


public class TestIo{
    public static  void  main(String[] arg0) throws IOException {
//     writer(read());//1.使用BufferedReader和BufferedWriter读写文件
        //2、	实现一个FileFilter接口。
//        File file = new File("D:\\");
//        File[] files = file.listFiles(new FileFilter(){
//            @Override
//            public boolean accept(File pathname) {
//                // 判断文件名是目录 或 .txt结尾
//                if (pathname.isDirectory() || pathname.getName().toUpperCase().endsWith(".txt")) {
//                    return true;
//                }
//                return false;
//            }});
//
//        for (File f : files) {
//            System.out.println(f.getName());
//        }
        //3、	修改System.out，使得调用其中的println时，可以将内容输出到指定的文件中。
//        PrintStream myStream = new PrintStream(System.out) {
//            @Override
//            public void println(String x) {
//                super.println("加入："+x);
//                try {
//                    FileWriter fw = new FileWriter("D:\\testwriter.txt", true);
//                    BufferedWriter bw = new BufferedWriter(fw);
//                    bw.append(x);
//                    bw.close();
//                    fw.close();
//                } catch (Exception e) {
//                    // TODO Auto-generated catch block
//                    e.printStackTrace();
//                }
//            }
//        };
//        System.setOut(myStream);
//        System.out.println("Hello World!");


//        4.获取系统环境变量JAVA_HOME的地址，然后递归此文件夹下所有文件
//        Map map = System.getenv();
//        Iterator it = map.entrySet().iterator();
//        while(it.hasNext())
//        {
//            Map.Entry entry = (Map.Entry)it.next();
//            if (entry.getKey().equals("JAVA_HOME"))
//            {
//                getallfiles(entry.getValue().toString());
//
//            }
//        }
//        mkdirtree();
//        deletetree("D:\\test\\mkdirtree");
//        optionfile();
        iffile();
    }

    /**
     * 1.读取文件
     * @return
     * @throws IOException
     */
    public static String read() throws IOException {
        File ff = new File("D:\\test\\testreader.txt");
        BufferedReader reader = null;
        String a = null;
        InputStreamReader inStream = null;
        try {
            inStream = new InputStreamReader(new FileInputStream(ff), "GBK");
            reader = new BufferedReader(inStream);
            a = reader.toString();
            try {
                return reader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {

                reader.close();

        }  }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static void writer(String c) throws IOException {
        File fileOut= new File("D:\\test\\testwriter.txt");
        OutputStreamWriter writerStream = new OutputStreamWriter(new FileOutputStream(fileOut),"GBK");
        BufferedWriter writer=new BufferedWriter(writerStream);
        String b=null;
          if (c!=null||c!="")
          {
            writer.write(c);
            writer.newLine();
            writer.flush();
        }
        writer.close();

    }

    /**
     * 4.递归查询并输出某目录文件名
     * @param fileDir
     */
    private static void getallfiles(String fileDir) {
        List<File> fileList = new ArrayList<File>();
        File file = new File(fileDir);
        File[] files = file.listFiles();// 获取目录下的所有文件或文件夹
        if (files == null) {// 如果目录为空，直接退出
            return;
        }
        // 遍历，目录下的所有文件
        for (File f : files) {
            if (f.isFile()) {
                fileList.add(f);
            } else if (f.isDirectory()) {
                System.out.println(f.getAbsolutePath());
                getallfiles(f.getAbsolutePath());
            }
        }
        for (File f1 : fileList) {
            System.out.println(f1.getName());
        }
    }
/**
 * 5.mkdirtree创建目录树,deletetree删除
 */
   public  static void  mkdirtree()
   {
       for (int i=0;i<=10;i++)
       {
           File a=new File("D:\\test\\mkdirtree\\a"+i);

           if (a.exists())
           {
               a.delete();
               System.out.println("已存在并且删除");
           }
           a.mkdirs();
           System.out.println("创建文件：a"+i);
           if (i%2==0)
           {
               for (int j=0;j<=10;j++)
               {
                   File b=new File("D:\\test\\mkdirtree\\a"+i+"\\b"+j);
                   b.mkdirs();
                   System.out.println("创建文件：b"+i);
               }
           }
       }
   }
   public  static void deletetree(String path)
   {
       List<File> fileList = new ArrayList<File>();
       File file =new File(path);
       File[] files = file.listFiles();// 获取目录下的所有文件或文件夹
       if (files == null) {// 如果目录为空，直接退出
           return;
       }
       // 遍历，目录下的所有文件
       for (File f : files) {
           if (f.isFile()) {
               fileList.add(f);
           } else if (f.isDirectory()) {
               System.out.println(f.getAbsolutePath());
               f.delete();
               deletetree(f.getAbsolutePath());
           }
       }
       for (File f1 : fileList) {
           System.out.println("走到文件："+f1.getAbsolutePath());
             f1.delete();
       }
   }
    /**
     * 6.操作文件
     */
    public static void optionfile() throws IOException {
        File a=new File("D:\\test\\Option.txt");
          if(a.exists())
        {
            String aa=a.getParent();
            System.out.println(aa);
            if (a.renameTo(new File(aa+"\\"+"Options.text")))
            {
                System.out.println("修改成功1！");

            }
            File as=new File("D:\\test\\Options.text");
            as.delete();
            System.out.println("删除了");
         }else {
              if (a.createNewFile()) {
                  System.out.println("创建成功！");
              }
              String aa=a.getParent();
              if (a.renameTo(new File(aa+"\\"+"Options.text")))
              {
                  System.out.println("修改成功！2");
              }
          }


    }
    /**
     * 7.	判断指定的文件是否存在，并获取文件的实际大小、占用空间大小、最后修改时间。
     */
     public  static void  iffile() throws IOException {
         File a=new File("D:\\test\\testreader.txt");
         if(a.exists())
         {
             System.out.println(a.length());
             FileReader fileReader = new FileReader(a);
             BufferedReader br = new BufferedReader(fileReader);
             System.out.println(new FileInputStream(new File("D:\\test\\testreader.txt")).available());
             Calendar cal = Calendar.getInstance();
             long time = a.lastModified();
             cal.setTimeInMillis(time);
             System.out.println("最后修改时间 " + cal.getTime());
         }
     }


}
